import { Message } from "element-ui"

const utils = {
  /**
   * 对数据进行新增/编辑/删除/查询操作进行Message弹框
   * @param {object} response 接口返回的数据
   * @param {function} callback 状态码为200的回调函数
   * @param {boolean} showSuccess 是否显示成功的message,默认为true,当为false时,状态码为200不显示
   */
  handleMsg: (response, callback, showSuccess = true, ctx, prefix = '') => {
    prefix = prefix ? prefix + ': ' : ''
    if (response.code === 20000) {
      if (showSuccess) {
        if (ctx) {
          ctx.success(prefix + response.message)
        } else {
          Message.success(prefix + response.message)
        }
        
      }
      if (callback) {
        callback(response.data)
      }
    } else {
      if (ctx) {
        ctx.error(prefix + response.message)
      } else {
        Message.error(prefix + response.message)
      }
      
    }
  },
  /**
   * 针对表单赋值(一般用于编辑表单)
   * @param {object} data 来源数据
   * @param {object} target 赋值目标对象
   * @param {array} extra 默认为空数组,额外需要赋值的字段
   */
  setFormValue: (data, target, extra = []) => {
    const keys = Object.keys(target)
    keys.forEach(key => {
      target[key] = data[key]
    })
    extra.forEach(key => {
      target[key] = data[key]
    })
  },
  /**
   * 防抖
   * @param {function} fn 执行事件
   * @param {number} delay 延迟时间
   */
  debounce: (fn, delay) => {
    let time = null
    return function() {
      if (time !== null) {
        clearTimeout(time)
      }
      time = setTimeout(() => {
        fn.apply(this, arguments)
      }, delay)
    }
  }
}

export default utils
